home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
wb
/
czesc_2
/
iobject
/
demo_fr.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-03-31
|
7KB
|
330 lines
/* Essai des objets V0.15
* Thu Feb 4 12:25:08 1993
*/
#define INTUITION_PREFERENCES_H 0
#include <intuition/intuition.h>
#include "IObject.h"
/* Je ne veux utiliser que les fontes de la ROM donc je n'ouvre pas la */
/* diskfont.library et je mets DiskfontBase à NULL */
CPTR DiskfontBase=NULL;
struct Window *window=NULL;
struct NewWindow new_window=
{
50, 25, /* Position de la fenêtre */
480, 125, /* Taille de la fenêtre */
0, 1,
CLOSEWINDOW|IDCMP_CYCLE|IDCMP_CHECK|IDCMP_STRING|IDCMP_BUTTON|IDCMP_STRING|
IDCMP_INTEGER|IDCMP_SCROLLER|VANILLAKEY, /* IDCMPFlags */
SMART_REFRESH|WINDOWCLOSE|WINDOWDRAG|WINDOWDEPTH|ACTIVATE|RMBTRAP, /* Flags*/
NULL,
NULL,
"Test de IObject.lib", /* Titre de la fenetre */
NULL,
NULL,
0, 0,
0, 0,
WBENCHSCREEN /* Type: fenetre Workbench. */
};
struct TextAttr font=
{
"topaz.font",
8,
FS_NORMAL,
FPF_ROMFONT
};
STRPTR text[]= /* tableau de chaines pour le cycle */
{
"IObject.lib",
"is very",
"useful.",
NULL /* NOTEZ-BIEN: il faut un NULL à la fin du tableau de chaines */
};
struct NewCycle newcycle=
{
203, 17,
122, 14,
LABEL_LEFT|LABEL_HOT_KEY,
0,
"C_ycle",
&font,
text /* tableau de chaine de caracteres */
};
struct NewScroller newscroller=
{
358, 28,
106, 11,
LABEL_ABOVE,
0,
"Scroller",
&font,
0, /* Pos = 0 */
25, /* Partie visible 25 */
100 /* Maximum 100 */
};
struct NewButton newbutton=
{
22, 17,
94, 14,
LABEL_INSIDE|LABEL_HOT_KEY,
0,
"_Button",
&font
};
struct NewButton newtoggle=
{
331, 97,
140, 14,
LABEL_INSIDE|LABEL_HOT_KEY|LABEL_PEN2,
BT_TOGGLE, /* le bouton est interrupteur */
"_Toggle Button",
&font
};
struct NewCheck newcheck=
{
403, 74,
20, 16,
LABEL_LEFT|LABEL_HOT_KEY,
0,
"_Check",
&font
};
struct NewInteger newint=
{
256, 42,
72, 14,
LABEL_RIGHT|LABEL_HOT_KEY,
STR_CENTER, /* l'entier est centré dans l'IObject */
"_Integer",
&font
};
struct NewString newstr=
{
8, 38,
162, 12,
LABEL_RIGHT|LABEL_HOT_KEY,
STR_SINGLEBORD, /* Bordure simple */
"_String",
&font,
"Welcome to IObject.lib", /* texte initial */
40 /* 40 caracteres au maximum */
};
/* identificateur pour les IObject */
#define ID_CYCLE 0
#define ID_SCROLLER 1
#define ID_BUTTON 2
#define ID_CHECK 3
#define ID_INTEGER 4
#define ID_STRING 5
#define ID_TGBUTTON 6
#define ID_MIN ID_CYCLE
#define ID_MAX ID_TGBUTTON
CPTR EZGadget[ID_MAX + 1]={0}; /* Tableau d'IObject */
struct NewTextArea newtextarea=
{
10, 64,
312, 57,
LABEL_ABOVE,
TAF_CLIP_TEXT, /* le texte qui dépasse se poursuit à la ligne suivante */
"TextArea",
&font,
1,3,
1, /* un pixel entre deux lignes */
0x03 /* bitplanes 1 et 2 utilisés */
};
CPTR textarea=NULL; /* pointeur sur le TextAera */
UBYTE HotKeyTable[ID_MAX+1]; /* tableau pour gerer les raccourcis clavier */
/*
* Cherche un caractère dans un tableau de caracteres
* Renvoie l'index du caractère dans le tableau ou -1 s'il n'y est pas
*/
WORD FindHotKey(UBYTE hotkey, UBYTE *table, UWORD len)
{
UWORD ind=0;
while (len--)
{
/* toupper si on ne veut pas faire la difference entre majuscule et minuscule */
if (toupper(*table++) == toupper(hotkey))
return (ind);
ind++;
}
return (-1);
}
/*
* Libere les ressources
*/
VOID clean_exit(void)
{
COUNT i;
if (window) CloseWindow(window);
for (i = ID_MIN; i <= ID_MAX; i++) /* libère tous les object */
if (EZGadget[i])
FreeObject(EZGadget[i]);
if (textarea) FreeTextArea(textarea);
ExitEasyGadget(); /* IL FAUT appeler ExitEasyGadget() avant de partir */
exit();
}
main()
{
struct IntuiMessage *message;
BOOL close_me;
COUNT i;
/* On ouvre la fenetre */
window = (struct Window *) OpenWindow( &new_window );
/* fenetre ouverte ? */
if(!window)
clean_exit();
/* Initialiser IObject.lib */
if (!InitEasyGadget())
clean_exit();
/* cree le TextArea, on s'en va si il y a une erreur */
if (!(textarea = CreateTextArea(&newtextarea, window->RPort)))
clean_exit();
/* Creer les objets */
EZGadget[ID_CYCLE] = CreateCycle(&newcycle, ID_CYCLE);
EZGadget[ID_SCROLLER] = CreateScroller(&newscroller, ID_SCROLLER);
EZGadget[ID_BUTTON] = CreateButton(&newbutton, ID_BUTTON);
EZGadget[ID_CHECK] = CreateCheck(&newcheck, ID_CHECK);
EZGadget[ID_INTEGER] = CreateInteger(&newint, ID_INTEGER);
EZGadget[ID_TGBUTTON] = CreateButton(&newtoggle, ID_TGBUTTON);
EZGadget[ID_STRING] = CreateString(&newstr, ID_STRING);
/* Verifier que les objects ont été crées */
for (i = ID_MIN; i <= ID_MAX; i++)
if (EZGadget[i] == NULL)
clean_exit();
/* ajouter les objets à la fenetre et les afficher */
for (i = ID_MIN; i <= ID_MAX; i++)
if (EZGadget[i])
{
AddObjectToWindow(EZGadget[i], window, NULL);
DisplayObject(EZGadget[i]);
}
/* affiche un message de bienvenue */
TAPuts(textarea, "Welcome in IObject.lib");
/* remplit le tableau pour gerer les raccourcis-clavier */
for (i = ID_MIN; i <= ID_MAX; i++)
HotKeyTable[i] = GetHotKey(EZGadget[i]);
/* l'entier doit être compris entre -5000 et 5000 */
ModifyObject(EZGadget[ID_INTEGER], 0, -5000, 5000);
/* On reste dans la boucle tant qu'on a pas cliqué dans le gadget de fermeture */
close_me = FALSE;
while(close_me == FALSE)
{
/* attendre un évenement */
Wait(1 << window->UserPort->mp_SigBit);
/* Recuperer l'IntuiMessage */
while(message = (struct IntuiMessage *) GetMsg(window->UserPort))
{
struct IntuiMessage msg;
BOOL changed;
CPTR obj;
UWORD ID;
changed = FALSE;
msg = *message; /* recopier le message */
ReplyMsg(message);
/* Traiter l'evenement */
switch( msg.Class )
{
case CLOSEWINDOW: /* CloseWindow gadget => on s'en va */
close_me=TRUE;
break;
case VANILLAKEY: /* Raccourcis-clavier */
if ((ID = FindHotKey(msg.Code, HotKeyTable, ID_MAX+1)) != -1)
{
obj = EZGadget[ID];
ActivateObject(obj);
changed = TRUE;
}
break;
default:
if (obj = FindObjectMsg(&msg))
{
ID = GetObjectID(obj);
changed = SendMsgToObject(obj, &msg);
}
break;
}
if (changed)
{
switch (ID)
{
case ID_CYCLE:
TAPrintf(textarea, "Option %s selected.\n", text[ObjectValue(obj)]);
break;
case ID_SCROLLER:
TAPrintf(textarea, "Position = %ld.\n", ObjectValue(obj));
break;
case ID_BUTTON:
TAPuts(textarea, "Button pressed.");
break;
case ID_CHECK:
if (ObjectValue(obj))
TAPuts(textarea, "Check is marked.");
break;
case ID_INTEGER:
TAPrintf(textarea, "Integer Value is %ld.\n", ObjectValue(obj));
break;
case ID_STRING:
TAPrintf(textarea, "You have entered the text: %s.\n", ObjectValue(obj));
break;
case ID_TGBUTTON:
TAPrintf(textarea, "Button is %s.\n", ObjectValue(obj) ? "On" : "Off");
break;
}
}
}
}
clean_exit();
}